package com.ypf;

import java.util.*;
import java.util.stream.Collectors;

public class Main {
    /**
     * JVM会从main方法开始执行代码, 主类必须包含一个符合以下签名的静态方法：
     * public：允许JVM访问该方法。
     * static：无需创建类的实例即可调用。
     * void：不返回任何值。
     * String[] args：接收命令行参数。
     */
    public static void main(String[] args) {

        /*
         * 调用其他类的方法
         */
        Animal animal = new Animal("猫咪");
        animal.eat("banana");
        Animal.run();


        /*
          基础类型：整数类型 byte/short/int/long、浮点类型 float/double、字符类型 char、布尔类型 boolean
          引用类型：类 class、接口 Interface、数组 Array、枚举 Enum、注解 Annotation
         */


        // String 引用类型
        String str1 = "Tom";
        String str2 = new String("Tom");
        System.out.println(str1 == str2);
        System.out.println(str1.equals(str2));


        // Array
        // 普通 for 循环，需要使用下标
        for (int i = 1; i <= 5; i++) {
            System.out.println("i = " + i);
        }

        // for-each 循环，不需要使用下标
        int[] nums = {1, 2, 3};
        String[] names = {"a", "b", "c"};
        for (int num : nums) {
            System.out.println("num = " + num);
        }
        for (String name : names) {
            System.out.println("name = " + name);
        }

        // stream 流循环
        Arrays.stream(nums).forEach(str -> System.out.println("stream -- str = " + str));

        // 多维数组
        String[][] strArr = new String[2][3];
        strArr[0][0] = "a";
        System.out.println("strArr: " + Arrays.deepToString(strArr));

        // Array 类型常用方法
        // 1 sort() 数组排序
        String[] strs = {"banana", "apple", "cherry"};
        Arrays.sort(strs, (a, b) -> a.compareTo(b)); // 按字典序升序
        System.out.println("sort: " + Arrays.toString(strs));

        // 2 fill() 用指定数值填充数组
        int[] arr = new int[5];
        Arrays.fill(arr, 10); // 结果：[10, 10, 10, 10, 10]
        Arrays.fill(arr, 1, 3, 20); // 结果：[10, 20, 20, 10, 10]
        System.out.println("fill: " + Arrays.toString(arr));

        // 3 copyOf() 复制数组并指定新长度（超出部分补默认值）
        int[] arr2 = {1, 2, 3};
        int[] copy1 = Arrays.copyOf(arr2, 5); // 结果：[1, 2, 3, 0, 0]
        int[] copy2 = Arrays.copyOf(arr2, 2); // 结果：[1, 2]
        System.out.println("copyOf: " + Arrays.toString(copy1) + Arrays.toString(copy2));

        // 4 equals()：比较两个数组的内容是否相等
        int[] arr3 = {1, 2, 3};
        int[] arr4 = {1, 2, 3};
        System.out.println("equals: " + Arrays.equals(arr3, arr4)); // 输出：true

        // 5 binarySearch()：在已排序数组中查找元素，返回索引（未找到返回负数）
        int[] arr5 = {1, 3, 5, 7};
        int index = Arrays.binarySearch(arr5, 5); // 返回：2
        int notFound = Arrays.binarySearch(arr5, 4); // 返回：-3（插入点为2，即 -(2+1)）
        System.out.println("binarySearch: " + index + notFound);

        // 6 stream()：将数组转为Stream（Java 8+），支持函数式操作
        int[] arr6 = {1, 2, 3};
        int sum = Arrays.stream(arr6).sum(); // 求和：6
        System.out.println("stream: " + sum);

        // 7 parallelSort()：并行排序（大数据量时性能优于sort()）
        int[] arr7 = {5, 3, 1, 4, 2};
        Arrays.parallelSort(arr7); // 并行排序，结果：[1, 2, 3, 4, 5]
        System.out.println("parallelSort: " + Arrays.toString(arr7));


        // Stream 流常用的函数
//        过滤	filter(predicate)	stream.filter(n -> n > 5)
//        映射	map(function)	stream.map(String::toUpperCase)
//        排序	sorted() / sorted(comparator)	stream.sorted(Comparator.comparingInt(String::length))
//        去重	distinct()	stream.distinct()
//        截断	limit(n) / skip(n)	stream.limit(10) / stream.skip(5)
//        聚合	reduce(initial, binaryOperator)	stream.reduce(0, Integer::sum)
//        收集	collect(collector)	stream.collect(Collectors.toList())
//        匹配	allMatch() / anyMatch() / noneMatch()	stream.allMatch(n -> n > 0)
//        数值流	IntStream / LongStream / DoubleStream	IntStream.range(1, 100).sum()
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> evenNumbers = numbers.stream()
                .filter(n -> n % 2 == 0) // 保留偶数
                .collect(Collectors.toList()); // [2, 4]
        System.out.println("collect: " + evenNumbers);














    }
}




